<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 异步任务分为宏任务和微任务
        // 宏任务：定时器，文件读取，事件处理函数，异步的ajax请求，整个script标签
        // 微任务：Promise，process.nextTick
        // 微任务会排在宏任务之前执行
        // 同步任务-->微任务-->宏任务
        // 面试题1
        // console.log(1)

        // setTimeout(function () {
        //     console.log(2)
        // }, 0)

        // const p = new Promise((resolve, reject) => {
        //     resolve(1000)
        // })
        // p.then(data => {
        //     console.log(data)
        // })

        // console.log(3)

        // 1 3 1000 2
        // 面试题2
        // console.log(1)
        // setTimeout(function () {
        //     console.log(2)
        //     new Promise(function (resolve) {
        //         console.log(3)
        //         resolve()
        //     }).then(function () {
        //         console.log(4)
        //     })
        // })

        // new Promise(function (resolve) {
        //     console.log(5)
        //     resolve()
        // }).then(function () {
        //     console.log(6)
        // })
        // setTimeout(function () {
        //     console.log(7)
        //     new Promise(function (resolve) {
        //         console.log(8)
        //         resolve()
        //     }).then(function () {
        //         console.log(9)
        //     })
        // })
        // console.log(10)
        //  1 5 10 6 2 3 4 7 8 9
        // 面试题3
        // console.log(1)

        // setTimeout(function () {
        //     console.log(2)
        // }, 0)

        // const p = new Promise((resolve, reject) => {
        //     console.log(3)
        //     resolve(1000) // 标记为成功
        //     console.log(4)
        // })

        // p.then(data => {
        //     console.log(data)
        // })

        // console.log(5)
        //  1 3 4 5 1000 2 
        // 面试题4
        // 微任务同时有多个，后来的往前插
        // new Promise((resolve, reject) => {
        //     resolve(1)
        //     resolve(100) // 状态凝结，Promise对象已经有了结果，后面的resolve都不执行
        //     new Promise((resolve, reject) => {
        //         resolve(2)
        //     }).then(data => {
        //         console.log(data)
        //     })

        // }).then(data => {
        //     console.log(data)
        // })

        // console.log(3)
        // 3 2 1

        // 面试题5
        setTimeout(() => {
            console.log(1)
        }, 0)
        new Promise((resolve, reject) => {
            console.log(2)
            resolve('p1')

            new Promise((resolve, reject) => {
                console.log(3)
                setTimeout(() => {
                    resolve('setTimeout2')
                    console.log(4)
                }, 0)
                resolve('p2')
            }).then(data => {
                console.log(data)
            })

            setTimeout(() => {
                resolve('setTimeout1')
                console.log(5)
            }, 0)
        }).then(data => {
            console.log(data)
        })
        console.log(6)

        // 2 3  6  P2  p1 1 4 5 
    </script>
</body>

</html>